<?php

namespace App\Exports;

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;

class StaffExport implements FromCollection, WithHeadings, WithColumnWidths, WithEvents
{
    protected $data;

    public function __construct(Collection $data)
    {
        $this->data = $data;
    }

    public function collection()
    {
        return $this->data;
    }

    public function headings(): array
    {
        return [
            '序号',
            '部门',
            '职务',
            '姓名',
            '英文名',
            '工号',
            '入职日期',
            '试用时长/月',
            '转正日期',
            '性别',
            '出生日期',
            '年龄',
            '联系电话',
            '邮箱',
            '籍贯',
            '身份证号',
            '户籍所在地',
            '民族',
            '现住址',
            '最高学历',
            '专业',
            '毕业院校',
            '政治面貌',
            '婚姻状况',
            '紧急联系人',
            '关系',
            '紧急联系人电话',
            '工龄（年）',
            '工龄(月)',
            '年休假',
            '第几次签订合同',
            '最近一次合同签订日期',
            '合同年限',
            '合同到期日期',
            '合同续签日期',
            '到期提醒',
            '社保电脑号',
            '住房公积号',
            '开卡行',
            '银行卡号',
            '备注',
            '创建日期',
            '创建人',
        ];

    }

    public function columnFormats(): array
    {
        return [
            'M' => NumberFormat::FORMAT_TEXT, // phone
            'P' => NumberFormat::FORMAT_TEXT, // id_number
            'Y' => NumberFormat::FORMAT_TEXT, // emergency_contact_phone
            'AK' => NumberFormat::FORMAT_TEXT, // salary_card_number
            'AL' => NumberFormat::FORMAT_TEXT, //
            'AN' => NumberFormat::FORMAT_TEXT, //
        ];
    }

    public function columnWidths(): array
    {
        // 设置每列的宽度
        return [
            'A' => 20,
            'B' => 20,
            'C' => 20,
            'D' => 20,
            'E' => 20,
            'F' => 20,
            'J' => 20
            // 根据你的需求设置其他列的宽度
        ];
    }

    public function registerEvents(): array
    {
        return [
            AfterSheet::class => function(AfterSheet $event) {
                $event->sheet->getDelegate()->freezePane('A2');
            },
        ];
    }

}